/* 
 * File:   TigerSuperState.h
 * Author: Hadrien
 *
 * Created on 11 juillet 2012, 17:58
 */

#ifndef TIGERSUPERSTATE_H
#define	TIGERSUPERSTATE_H
#include "typesTiger.h"
#include <iostream>

class TigerSuperState {
public:
    typedef TigerState state_t;
    typedef TigerObservation obs_t;
    typedef TigerAction action_t;
    TigerSuperState();
    TigerSuperState(const TigerSuperState& s2);
    TigerSuperState(const state_t& state, int Ll, int Lr, int Rl, int Rr);    
    TigerSuperState(const state_t& state);
    virtual ~TigerSuperState();
    
    //Overload comparison to be used in a belief
    bool operator<(TigerSuperState const &s2) const; 
    bool operator==(TigerSuperState const &s2) const;
    state_t getState() const;
    TigerSuperState update(int a, int ss, int z) const;    
    double getT(int s, int a, int ss) const;    
    double getO(int s, int a, int z) const;
    
    friend std::ostream& operator<< (std::ostream &out, const TigerSuperState &s);
    
private:
    state_t m_state;
    int m_countObservations[state_t::size][obs_t::size];
};

#endif	/* TIGERSUPERSTATE_H */

